package com.odontosis.view.cadastro.usuario;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import com.odontosis.entidade.GrupoUsuario;
import com.odontosis.entidade.Usuario;
import com.odontosis.service.UsuarioService;
import com.odontosis.util.StringUtilsOdontosis;
import com.odontosis.view.OdontosisForm;

public class FormInclusaoUsuario extends OdontosisForm {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private String nome;

	private String login;

	private String senha;

	private String senhaConfirmacao;

	private String grupoUsuario;

	private Collection<String> erros;

	public Collection<String> getColecaoErros() {
		Collection<String> erros = new ArrayList<String>();
		erros.add("erro");
		erros.add("erro");
		erros.add("erro");
		erros.add("erro");
		return erros;
	}

	public Collection<String> getErros() {
		if (erros != null) {
			return erros;
		}
		return new ArrayList<String>();
	}

	@Override
	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		ActionErrors errors = new ActionErrors();
		ActionMessages messages = new ActionMessages();

		if (StringUtilsOdontosis.isVazia(getNome())) {
			messages.add("nome",
					new ActionMessage("O campo Nome é obrigatório"));
		}
		if (StringUtilsOdontosis.isVazia(getLogin())) {
			messages.add("login", new ActionMessage(
					"O campo Login é obrigatório"));
		}
		if (StringUtilsOdontosis.isVazia(getSenha())) {
			messages.add("senha", new ActionMessage(
					"O campo Senha é obrigatório"));
		}
		if (StringUtilsOdontosis.isVazia(getGrupoUsuario())) {
			messages.add("grupoAcesso", new ActionMessage(
					"O campo Grupo de acesso é obrigatório"));
		}
		if (messages.size() == 0) {
			if (!getSenha().equals(getSenhaConfirmacao()) && (getId() == null || equals(0))) {
				messages.add("senha", new ActionMessage(
						"A confirmção da senha difere do campo senha"));
			}
		}
		
		
		UsuarioService usuarioService = null;
		try{
			usuarioService = new UsuarioService();
		}catch (Exception e) {
			// TODO: handle exception
		}
		if(this.getLogin() != null){
				Usuario usuario = usuarioService.buscarPorLogin(this.getLogin());
				if(usuario != null && !(usuario.getId().equals(getId()))){
					messages.add("login", new ActionMessage("O login já se encontra cadastrado."));
				}
		}
			
			
		

		if (messages.size() > 0 && getMetodo() != null) {
			errors.add(messages);
			erros = new ArrayList<String>();
			for (Iterator iterator = messages.get(); iterator.hasNext();) {
				ActionMessage string = (ActionMessage) iterator.next();
				erros.add(string.getKey());
			}
			request.setAttribute("mensagens", erros);
			return errors;
		} else {
			request.setAttribute("mensagens", null);
			return super.validate(mapping, request);
		}

	}

	public List<GrupoUsuario> getColecaoGrupoUsuario() {
		return Arrays.asList(GrupoUsuario.values());
	}

	public String getGrupoUsuario() {
		return grupoUsuario;
	}

	public void setGrupoUsuario(String grupo) {
		this.grupoUsuario = grupo;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nomeUsuario) {
		this.nome = nomeUsuario;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getSenhaConfirmacao() {
		return senhaConfirmacao;
	}

	public void setSenhaConfirmacao(String senhaConfirmacao) {
		this.senhaConfirmacao = senhaConfirmacao;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public Usuario transferirParaUsuario() {
		return null;

	}

	public void resetar() {
		this.setLogin(null);
		this.setLogin(null);
		this.setNome(null);
		this.setSenha(null);
		this.setSenhaConfirmacao(null);
		this.setGrupoUsuario(null);
		this.setMetodo(null);
	}

}
